package jp.chiheisen.popuptail;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;

/**
 * PopupTail は、ファイルに変更があった場合に通知を行うプログラムです。
 * Linux の tail -f コマンドと大体同じ機能です(たぶん)。
 *
 * このプログラムは、通知領域(タスクトレイ)がある環境で動作します。
 * WindowsXP上で動作確認済みですが、MacやLinux(GUI環境上)でも動くと思います。
 *
 * このプログラムの実行には、Java7以上が必要です。
 *
 * @author  YujiYamamoto
 */
public class Main {

	/**
	 * PopupTail を起動します。
	 *
	 * @param args 対象のファイル(省略した場合、ダイアログで指定)、文字コード(省略した場合、システムデフォルト)
	 * @throws java.io.IOException 内部リソースの読み込みに失敗したとき
     * @throws java.awt.AWTException 非GUI環境でこのプログラムを実行したとき
	 */
	public static void main(String[] args) throws IOException, AWTException {
        File file = (args.length > 0) ? new File(args[0]) : getSelectedFile();
        if(!file.isFile()){
            System.err.println("該当のファイルが存在しません。");
            return;
        }

        Charset charset = (args.length > 1) ? Charset.forName(args[1]) : Charset.defaultCharset();

		PopupTail tail =  new PopupTail(file, charset);
		tail.start();
	}

    private static File getSelectedFile(){
		// 可能なら、システムデフォルトの Look&Feel に変更
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
		}

        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Text File (*.txt, *.log)", "txt", "log");
        chooser.setFileFilter(filter);

        int ret = chooser.showOpenDialog(null);
        if(ret != JFileChooser.APPROVE_OPTION) {
            System.exit(0);
        }

        return chooser.getSelectedFile();
    }
}
